#pragma once

class DIActor;
class DPlayer;
class DBackground;
namespace Weapons { struct BulletCreationParams; }
class DIResourceManager;
class DGame;

class DActorFactory
{
public:
	static DActorFactory& instance();

	boost::shared_ptr<DPlayer> createPlayer(boost::shared_ptr<DGame> game);
	boost::shared_ptr<DBackground> createBackground(const std::string& backName, boost::shared_ptr<DIResourceManager> resManager);
	boost::shared_ptr<DIActor> createEnemy(boost::shared_ptr<DGame> game, const std::string& strEnemyType, float xStart, float yStart, 
		boost::shared_ptr<DIResourceManager> resManager);
    boost::shared_ptr<DIActor> createBullet(boost::shared_ptr<DGame> game, boost::shared_ptr<DIActor> source, 
                                            const std::string& strBulletType, const Weapons::BulletCreationParams& bcParams);
private:
	DActorFactory(void);
	~DActorFactory(void);
};
